package marketplace.jpa.dao;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
import java.util.Date;
import java.util.List;

import javax.ejb.Stateless;
import javax.ejb.TransactionAttribute;
import javax.ejb.TransactionAttributeType;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import marketplace.jpa.datas.DataRegistroAcceso;
import marketplace.jpa.entities.RegistroAcceso;
import marketplace.jpa.interfaces.IRegistroAccesoDAO;

@Stateless
public class RegistroAccesoDAO implements IRegistroAccesoDAO{
	
	@PersistenceContext(unitName="Marketplace")
	EntityManager em;
	
	
	@Override
	@TransactionAttribute(TransactionAttributeType.REQUIRED)
	public boolean ingresarRegistro(DataRegistroAcceso dr) throws Exception {
		boolean ok = false;
		try {

			RegistroAcceso r = new RegistroAcceso();
			r.setFechaRegistro(dr.getFechaAcceso().toString());
			r.setCliente(dr.getCliente());

			em.persist(r);			
			em.flush();			
					
			ok = true;
			
		} catch (Exception e) {
			System.out.println("Error DAO RegistroAcceso (Funcion ingresoRegistroAcceso) " + e.getMessage());
		}
		return ok;
	}
	
	@Override
	@TransactionAttribute(TransactionAttributeType.REQUIRED)
	public List<DataRegistroAcceso> getRegistrosAcceso() throws Exception {
	
		List<DataRegistroAcceso> resultado = new ArrayList<DataRegistroAcceso>();
		try{	
			
			Query q = em.createQuery("select r from RegistroAcceso r");
						
			if (q.getResultList() !=null ){
				int i=0;
				for(i=0; i<q.getResultList().size();i++){
					DataRegistroAcceso dr = new DataRegistroAcceso();
					RegistroAcceso aux = (RegistroAcceso) q.getResultList().get(i);
					dr.setCliente(aux.getCliente());
					dr.setFechaAcceso(aux.getFechaRegistro());
					resultado.add(dr);
				}
			}
		} 
		catch(Exception e){ System.out.println("Error DAO RegistrosAcceso (Funcion getRegistrosAcceso): " + e.getMessage()); }	
		Collections.sort(resultado);
		return resultado;

	}

	@Override
	@TransactionAttribute(TransactionAttributeType.REQUIRED)
	public String getRegistrosAccesoX() throws Exception {
		
		String resultado="[";
		try{	
			
			for (int i = 12; i > 0; --i) {
				Date hoy = new Date();
				Calendar fechaAux = Calendar.getInstance(); 
				fechaAux.setTime(hoy);
				fechaAux.add(Calendar.MONTH, -i);				
				resultado = resultado + "'" + obtenerMes(fechaAux.getTime()) + "'";
				if(i>1)
				resultado = resultado + "," + " ";	
			}
			resultado = resultado + "]";


				
		} 
		catch(Exception e){ System.out.println("Error DAO RegistrosAcceso (Funcion getRegistrosAccesoX): " + e.getMessage()); }				
		return resultado;
	}

	@Override
	@TransactionAttribute(TransactionAttributeType.REQUIRED)
	public String getRegistrosAccesoY() throws Exception {
		String resultado="[";
		
		try{	

			for (int i = 12; i > 0; --i) {
				Date hoy = new Date();
				Calendar fechaAux = Calendar.getInstance(); 
				
				SimpleDateFormat f =new SimpleDateFormat("dd/MM/yy");
 				String formattedDate = f.format(hoy);
				
 				java.util.Date d = f.parse(formattedDate);
 				SimpleDateFormat sdf = new SimpleDateFormat("yy");
 								
				fechaAux.setTime(d);
				fechaAux.add(Calendar.MONTH, -i);
				int mes = fechaAux.get(Calendar.MONTH) + 1;
				String auxiliar;
				
				if(mes<10)
					auxiliar = "0"+mes+"/"+sdf.format(fechaAux.getTime());
				else		
					auxiliar = mes+"/"+sdf.format(fechaAux.getTime());

		 		Query q = em.createQuery("select r from RegistroAcceso r where r.fechaAcceso like '%"+auxiliar+"'");
		 
		 		if(q.getResultList()!= null)
		 		resultado = resultado + q.getResultList().size();
		 		else
		 			resultado = resultado + 0;
				if(i>1)
				resultado = resultado + "," + " ";	

				
			}
			resultado = resultado + "]";
			

		} 
		catch(Exception e){ System.out.println("Error DAO RegistrosAcceso (Funcion getRegistrosAccesoY): " + e.getMessage()); }				
		return resultado;
	}
	
	public static String obtenerMes(Date date){
		 String result="";
		 Calendar calendar=Calendar.getInstance();
		 calendar.setTime(date);
		 int month=0;
		 
		 try{
		   month=calendar.get(Calendar.MONTH);
		 }catch(Exception ex){}
		 switch(month){
		  case 0:
		    {
		      result="Enero";
		      break;
		    }
		  case 1:
		    {
		      result="Febrero";
		      break;
		    }
		  case 2:
		    {
		      result="Marzo";
		      break;
		    }
		  case 3:
		    {
		      result="Abril";
		      break;
		    }
		  case 4:
		    {
		      result="Mayo";
		      break;
		    }
		  case 5:
		    {
		      result="Junio";
		      break;
		    }
		  case 6:
		    {
		      result="Julio";
		      break;
		    }
		  case 7:
		    {
		      result="Agosto";
		      break;
		    }
		  case 8:
		    {
		      result="Septiembre";
		      break;
		    }
		  case 9:
		    {
		      result="Octubre";
		      break;
		    }
		  case 10:
		    {
		      result="Noviembre";
		      break;
		    }
		  case 11:
		    {
		      result="Diciembre";
		      break;
		    }
		  default:
		    {
		      result="Error";
		      break;
		    }
		 }
		 return result;
		}

}
